import cn.hserver.core.ioc.annotation.Autowired;
import cn.hserver.plugin.web.annotation.Controller;
import cn.hserver.plugin.web.annotation.GET;
import cn.hserver.plugin.web.annotation.POST;
import cn.hserver.plugin.web.annotation.PUT;
import com.mybatisflex.core.paginate.Page;
import lombok.extern.slf4j.Slf4j;
import net.hserver.admin.system.common.MyResult;

import java.util.List;
import java.util.Optional;

/**
 * ${tableInfo.tableComment} 接口
 */
@Slf4j
@Controller("/${controllerName}")
public class ${name}Controller {

    @Autowired
    private ${name}Service service;

    /**
     * 分页查询列表
     *
     * @param index  当前页|1
     * @param size   页大小|10
     * @param entity 查询实体
     * @return 所有数据
     */
    @POST("/page/{index}/{size}")
    public MyResult selectAll(${name} entity, Long index, Long size) {
        Page<${name}> page = new Page<>(index, size);
        return MyResult.of(service.page(page, Optional.ofNullable(entity).orElse(new ${name}())));
    }


    /**
     * 不分页查询列表
     *
     * @param entity 实体对象
     * @return 查询结果
     */
    @POST("/list")
    public MyResult list(${name} entity) {
        return MyResult.of(service.list(Optional.ofNullable(entity).orElse(new ${name}())));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GET("/get/{id}")
    public MyResult getById(${priType} id) {
        return MyResult.of(service.getById(id));
    }

    /**
     * 批量删除数据
     *
     * @param ids 主键集合
     * @return 操作结果
     */
    @POST("/delete")
    public MyResult deleteByIds(List<${priType}> ids) {
        service.deleteByIds(ids);
        return MyResult.success();
    }

    /**
     * 新增单条数据
     *
     * @param entity 实体对象
     * @return 新增结果
     */
    @POST("")
    public MyResult save(${name} entity) {
        service.save(entity);
        return MyResult.success();
    }

    /**
     * 修改单条数据
     *
     * @param entity 实体对象
     * @return 修改结果
     */
    @PUT("")
    public MyResult update(${name} entity) {
        service.update(entity);
        return MyResult.success();
    }

}
